// import com.alibaba.druid.sql.ast.SQLExpr;
// import com.alibaba.druid.sql.ast.SQLObject;
// import com.alibaba.druid.sql.ast.SQLSetQuantifier;
// import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
// import com.alibaba.druid.sql.ast.expr.SQLLiteralExpr;
// import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr;
// import com.alibaba.druid.sql.ast.statement.*;
// import com.alibaba.druid.sql.dialect.mysql.ast.*;
// import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlSelectIntoStatement;
// import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlOutFileExpr;
// import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock;
// import com.alibaba.druid.sql.parser.ParserException;
// import com.alibaba.druid.sql.parser.SQLExprParser_ptr;
// import com.alibaba.druid.sql.parser.SQLSelectParser;
// import com.alibaba.druid.sql.parser.Token;
// import com.alibaba.druid.util.FnvHash;

// import java.util.ArrayList;
// import java.util.List;
#pragma once
#include "../../../parser/SQLSelectParser.h"

class MySqlSelectIntoParser : virtual public SQLSelectParser
{
public:
  SQLExpr_list_ptr argsList;

  MySqlSelectIntoParser(SQLExprParser_ptr exprParser);

  MySqlSelectIntoParser(string_ptr sql);

  MySqlSelectIntoStatement_ptr parseSelectInto();

  // @Override
  SQLSelectQuery_ptr query(SQLObject_ptr parent, BOOL_ptr acceptUnion);
  /**
   * parser the select into arguments
   *
   * @return
   */
  SQLExpr_list_ptr parseIntoArgs();
  void parseInto(SQLSelectQueryBlock_ptr queryBlock);
  SQLTableSource_ptr parseTableSourceRest(SQLTableSource_ptr tableSource);
  void parseIndexHintList(SQLTableSource_ptr tableSource);
  void parseIndexHint(MySqlIndexHintImpl_ptr hint);
  SQLUnionQuery_ptr unionRest(SQLUnionQuery_ptr union_);
  MySqlExprParser_ptr getExprParser();
};
